const sqlHelper = require('./sqlHelper');

const daoCommon = {
    /**
     * 登录后台方法
     * @param sql sql语句
     * @param value 参数
     * @returns {Promise}
     */
    loginCommon: (sql, value) => {
        return new Promise((resolve, reject) => {
            sqlHelper.pool.getConnection((err, con) => {
                try {
                    if (value) {
                        con.query(sql, value, (error, results) => {
                            if (error) {
                                con.release();
                                reject(error);
                            } else {
                                con.release();
                                resolve(results[0].count);
                            }
                        })
                    } else {
                        con.query(sql, (error, results) => {
                            if (error) {
                                con.release();
                                reject(error);
                            } else {
                                con.release();
                                resolve(results[0].count);
                            }
                        })
                    }
                } catch (e) {
                    console.error(e);
                    reject(e);
                }
            })
        })
    },
    /**
     * 执行查找数据列表方法
     * @param sql sql语句
     * @param value 参数
     * @returns {Promise}
     */
    queryCommon: (sql, value) => {
        return new Promise((resolve, reject) => {
            sqlHelper.pool.getConnection((err, con) => {
                try {
                    if (value) {
                        con.query(sql, value, (error, results) => {
                            if (error) {
                                con.release();
                                reject(error);
                            } else {
                                con.release();
                                resolve(results.affectedRows);
                            }
                        })
                    } else {
                        con.query(sql, (error, results) => {
                            if (error) {
                                con.release();
                                reject(error);
                            } else {
                                con.release();
                                resolve(results.affectedRows);
                            }
                        })
                    }
                } catch (e) {
                    console.error(e);
                    //let data={code:3,msg:e.message};
                    reject(e);
                }
            })
        })
    },
    /**
     * 执行查询数据操作方法
     * @param sql sql语句
     * @param value 参数
     * @returns {Promise}
     */
    selectCommon: (sql, value) => {
        return new Promise((resolve, reject) => {
            sqlHelper.pool.getConnection((err, con) => {
                try {
                    if (value) {
                        con.query(sql, value, (error, results) => {
                            if (error) {
                                con.release();
                                reject(error);
                            } else {
                                con.release();
                                resolve(results);
                            }
                        })
                    } else {
                        con.query(sql, (error, results) => {
                            if (error) {
                                con.release();
                                reject(error);
                            } else {
                                con.release();
                                resolve(results);
                            }
                        })
                    }
                } catch (e) {
                    console.error(e);
                    reject(e);
                }
            })
        })
    },
    /**
     * 获取数据总数的方法
     * @param sql sql语句
     * @param value 参数
     * @returns {Promise}
     */
    getSize: (sql, value) => {
        return new Promise((resolve, reject) => {
            sqlHelper.pool.getConnection((err, con) => {
                try {
                    if (value) {
                        con.query(sql, value, (error, results) => {
                            if (error) {
                                con.release();
                                reject(error);
                            } else {
                                con.release();
                                resolve(results[0].count);
                            }
                        })
                    } else {
                        con.query(sql, (error, results) => {
                            if (error) {
                                con.release();
                                reject(error);
                            } else {
                                con.release();
                                resolve(results[0].count);
                            }
                        })
                    }
                } catch (e) {
                    console.error(e);
                    reject(e);
                }
            })
        })
    },
    tran: (callBack) => {
        return new Promise((resolve, reject) => {
            sqlHelper.pool.getConnection((err, con) => {
                if (err) {
                    reject(err);
                } else {
                    const tran = con.beginTransaction((err) => {
                        if (err) {
                            tran.rollback();
                            reject(err);
                        } else {
                            try {
                                callBack(con);
                                tran.commit();
                                resolve();
                            } catch (e) {
                                tran.rollback();
                                reject(e);
                            }
                        }
                    })
                }
            });
        })
    },
    query(sql, con) {
        return new Promise((resolve, reject) => {
            con.query();
        })
    }
};
module.exports = daoCommon;